package com.example.hello.service;

import com.example.hello.common.PageBean;
import com.example.hello.entity.Emp;
import com.example.hello.entity.EmpExpr;
import com.example.hello.mapper.EmpExprMapper;
import com.example.hello.mapper.EmpMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 员工Service层
 */
@Service
@Transactional
public class EmpService {
    
    @Autowired
    private EmpMapper empMapper;
    
    @Autowired
    private EmpExprMapper empExprMapper;
    
    /**
     * 查询所有员工
     */
    public List<Emp> selectAll() {
        return empMapper.selectAll();
    }
    
    /**
     * 根据ID查询员工
     */
    public Emp selectById(Integer id) {
        return empMapper.selectById(id);
    }
    
    /**
     * 分页查询员工列表
     */
    public PageBean<Emp> selectByPage(String name, String username, Integer gender, LocalDate startDate, LocalDate endDate, Integer page, Integer pageSize) {
        // 计算偏移量
        Integer offset = (page - 1) * pageSize;
        
        // 查询数据列表
        List<Emp> rows = empMapper.selectByPage(name, username, gender, startDate, endDate, offset, pageSize);
        
        // 查询总记录数
        Long total = empMapper.selectTotal(name, username, gender, startDate, endDate);
        
        return new PageBean<>(total, rows);
    }
    
    /**
     * 添加员工
     */
    public int insert(Emp emp) {
        // 设置创建时间和更新时间
        LocalDateTime now = LocalDateTime.now();
        emp.setCreateTime(now);
        emp.setUpdateTime(now);
        
        // 设置默认密码
        if (emp.getPassword() == null || emp.getPassword().isEmpty()) {
            emp.setPassword("123456");
        }
        
        // 添加员工
        int result = empMapper.insert(emp);
        
        // 如果有工作经历，则添加工作经历
        if (emp.getWorkExperiences() != null && !emp.getWorkExperiences().isEmpty()) {
            for (EmpExpr expr : emp.getWorkExperiences()) {
                expr.setEmpId(emp.getId());
                expr.setCreateTime(now);
                expr.setUpdateTime(now);
                empExprMapper.insert(expr);
            }
        }
        
        return result;
    }
    
    /**
     * 修改员工
     */
    public int update(Emp emp) {
        // 设置更新时间
        emp.setUpdateTime(LocalDateTime.now());
        
        // 更新员工信息
        int result = empMapper.update(emp);
        
        // 删除原有工作经历
        empExprMapper.deleteByEmpId(emp.getId());
        
        // 重新添加工作经历
        if (emp.getWorkExperiences() != null && !emp.getWorkExperiences().isEmpty()) {
            LocalDateTime now = LocalDateTime.now();
            for (EmpExpr expr : emp.getWorkExperiences()) {
                expr.setEmpId(emp.getId());
                expr.setCreateTime(now);
                expr.setUpdateTime(now);
                empExprMapper.insert(expr);
            }
        }
        
        return result;
    }
    
    /**
     * 删除员工
     */
    public int deleteById(Integer id) {
        return empMapper.deleteById(id);
    }
    
    /**
     * 更新员工头像
     */
    public int updateAvatar(Integer id, String imgPath) {
        return empMapper.updateAvatar(id, imgPath, LocalDateTime.now());
    }

    /**
     * 根据用户名查询员工
     */
    public Emp selectByUsername(String username) {
        return empMapper.selectByUsername(username);
    }
}
